package org.apache.ibatis.demo;

import org.apache.ibatis.demo.bean.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * select demo
 *
 * @author zhaohui
 */
public class SelectDemo {

    public static void main(String[] args) throws IOException {
        // 定义资源文件
        InputStream resource = Resources.getResourceAsStream("org\\apache\\ibatis\\demo\\conf\\mybatis.xml");
        // 根据配置配置文件构建会话工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
        // 开启会话
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 指定statement
        String statement = "org.apache.ibatis.demo.UserDao.getByUserNameAndIdCard";
        // 指定参数
        Map<String, Object> param = new HashMap<>();
        param.put("userName", "张三");
        param.put("idCard", "693498003182090874");
        // 指定分页(逻辑分页)
        RowBounds rowBounds = new RowBounds(0, 10);

//        // 第一次查询
//        System.out.println("********************* 第一次查询 start *************************");
//        List<User> users = sqlSession.selectList(statement, param, rowBounds);
//        users.forEach(System.out::println);
//        System.out.println("********************* 第一次查询 end *************************\r\n");
//        // 第二次查询
//        System.out.println("********************* 第二次查询 start *************************");
//        List<User> users1 = sqlSession.selectList(statement, param, rowBounds);
//        users1.forEach(System.out::println);
//        System.out.println("********************* 第二次查询 end *************************\r\n");
//        // session关闭时写入全局缓存
//        sqlSession.close();
//        System.out.println();
//        // 新开启会话
//        System.out.println("********************* 第三次查询 start *************************");
//        SqlSession sqlSession1 = sqlSessionFactory.openSession();
//        List<User> users2 = sqlSession1.selectList(statement, param, rowBounds);
//        users2.forEach(System.out::println);
//        System.out.println("********************* 第三次查询 end *************************\r\n");


        List<User> userssss = sqlSession.getMapper(UserDao.class).getByUserNameAndIdCard("张三", "693498003182090874");
        userssss.forEach(System.out::println);
    }
}
